#include "ConfigurationManager.h"



        //Pre: processPath contiene el path al ejecutable actual
        ConfigurationSettings::ConfigurationSettings(const std::string  &processPath){
        	this->filepath = processPath +".config";
        }


        std::string & ConfigurationSettings::operator[](const std::string& key){

            if (this->values.count(key)==0)
            {
                values[key] = readFromConfigfile(key);
            }
            return values[key];
        }


        std::string ConfigurationSettings::readFromConfigfile(std::string key){
            ArchivoTexto archivo(this->filepath);
            bool encontrado=false;
            bool lecturaCorrecta= false;
            std::string linea;
            std::string value;
            lecturaCorrecta= archivo.leerLinea(linea);
            linea = Trim(linea);
            while (not encontrado && lecturaCorrecta){
                if (linea.substr(0,1) != ";" && linea.substr(0,1) != "#"){
                    int pos = linea.find_first_of("=");
                    if (pos>0){
                        if (toUpper(Trim(linea.substr(0,pos))) == toUpper(key)){
                            encontrado = true;
                            value = linea.substr(pos+1);
                            Trim(value);
                            if (value.substr(0,1)=="\"" && value.substr(value.size()-1,1)=="\"" ){
                                value = value.substr(1,value.size()-2);
                            }
                        }
                    }
                }
                if (!encontrado){
                    lecturaCorrecta= archivo.leerLinea(linea);
                    linea=Trim(linea);
                }
            }
            if (encontrado){
                return value;
            }
            else{
                throw ConfigurationKeyNotFoundException(key);
            }
        }





